/*
 * @author				: Juliano Zinni
 * @create				: 04/10/2011
 * @version				: 1.0
 * @description			: Página responsável por registrar as saídas no fluxo financeiro
*/


var functionsLoadDataUpdateSaida = {
	
	Projeto_codigo: ""
	,Movimentacao_codigo: ""
	,tipoPessoa: ""
	
	,listarPessoasSaida: function(tipoPessoa, codigoProjeto, codigoMovimentacao){
		functionsLoadDataUpdateSaida.Projeto_codigo = codigoProjeto
		functionsLoadDataUpdateSaida.Movimentacao_codigo = codigoMovimentacao
		functionsLoadDataUpdateSaida.tipoPessoa = tipoPessoa
		
		var objparams = {
			tipo: functionsLoadDataUpdateSaida.tipoPessoa
		}
		listaPessoasSaida.load({params : objparams, callback: functionsLoadDataUpdateSaida.listarProjetos});
	}

	,listarProjetos: function(record, options, success){
		if(success){
			
			var objparams = {
					
			}
			
			listaProjetosSaida.load({params : objparams, callback: functionsLoadDataUpdateSaida.listarDotacoes});
	
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem das pessoas",
				type: 'error'
			});
		}
		
		
	}
	
	
	,listarDotacoes: function(record, options, success){
		if(success){
			
			var objparams = {
				Projeto_codigo: functionsLoadDataUpdateSaida.Projeto_codigo
			}
			listaDotacoesSaida.load({params : objparams, callback: functionsLoadDataUpdateSaida.listarAtividades});

		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem dos projetos",
				type: 'error'
			});
		}
		
	}
	
	,listarAtividades: function(record, options, success){
		if(success){
			
			var objparams = {
				codigoProjeto: functionsLoadDataUpdateSaida.Projeto_codigo
			}
			listaAtividades.load({params : objparams, callback: functionsLoadDataUpdateSaida.capturaSaida});

		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem das dotações",
				type: 'error'
			});
		}
		
	}
	
	
	,capturaSaida: function(record, options, success){
		if(success){
			var objparams = {
				codigo: functionsLoadDataUpdateSaida.Movimentacao_codigo
			}
			capturaSaida.load({params : objparams, callback: functionsLoadDataUpdateSaida.returnCapturaSaida});
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem das atividades",
				type: 'error'
			});
		}
	}
		
	,returnCapturaSaida: function(record, options, success){
		if(success){
			formSaida.getForm().loadRecord( record[0] );
			
			if(formSaida.getForm().findField("Atividade_codigo").getValue() != ""){
				functionsSaidaForm.calculaValorEstimado(formSaida.getForm().findField("Atividade_codigo").getValue())
			}
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da captura da movimentação",
				type: 'error'
			});
		}	
	}
		
}




/*
 * @description: Funções para manipulação de saídas
 * @author: Juliano Zinni
 * @since: 04/10/2011
*/

var functionsSaidaForm = {
	
	
	dt_atual: new Date()
		
	,init: function(){
		functionsProjetoSaida.listaProjetosSaida();
	}
	
	,calculaValorEstimado: function(codigoAtividade){
		if(listaAtividades.getAt(listaAtividades.find("codigoAtividade", codigoAtividade)).data.valorEst != undefined){
			formSaida.getForm().findField("valorEstimadoAtividade").setValue(Ext.util.Format.number(listaAtividades.getAt(listaAtividades.find("codigoAtividade", codigoAtividade)).data.valorEst, '0.000,00/i'));
		}else{
			formSaida.getForm().findField("valorEstimadoAtividade").setValue("");
		}
	}

	,calculaSaldoDotacao: function(codigoDotacao){
		var objparams = {
			codigoDotacao: codigoDotacao
		}
		saldoDotacao.load({params : objparams, callback: functionsSaidaForm.returnCalculaSaldoDotacao});	
	}
	
	,returnCalculaSaldoDotacao: function(record, options, success){
		Ext.ux.MessageBox.flash({
			msg: "Saldo da dotação selecionada é de: " + Ext.util.Format.number(record[0].get("saldoCalculadoDotacao"), '0.000,00/i'),
			type: 'warning'
		});
		
	}
	
	
	,capturaSaida: function(codigoMovimentacao){
		var objparams = {
			codigo: codigoMovimentacao
		}
		capturaSaida.load({params : objparams, callback: this.returnCapturaSaida});
	}
	
	,returnCapturaSaida: function(record, options, success){
		formSaida.getForm().loadRecord( record[0] );
	}
	
	,insereRegistro: function(button){
		
		var form = formSaida.getForm();		
		
		if(form.isValid())
		{
			
			/*
			if(formSaida.getForm().findField("valorEstimadoAtividade").getValue() != "" && Ext.util.Format.number(formSaida.getForm().findField("valorOperacao").getValue(),'0.000,00/i') > formSaida.getForm().findField("valorEstimadoAtividade").getValue() && formSaida.getForm().findField("descricao").getValue() == ""){
				Ext.MessageBox.alert("Mensagem","Valor da operação é maior que valor estimado da atividade. Por favor justifique no campo descrição")
				formSaida.getForm().findField("descricao").focus();
			
			}else{
			*/	
				this.params = formSaida.form.getValues(true);
				this.params += "&tipo=D";
			
				this.loaderTarget = button;
				Ext.ux.Loader.start({sender: button, waitingText: 'Salvando...'});
		
				Ext.Ajax.request({
					url: baseURL + '/service/index.php?controller=MovimentoCaixaController&service=inserir',
					success:  function(result){
					
						var objRetorno = Ext.decode(result.responseText);
						
						if(objRetorno.success == true){
							Ext.ux.MessageBox.flash({
								msg: objRetorno.message,
								type: 'success'
							});
						   
							Ext.ux.Loader.stop(this.loaderTarget);
							windowSaidaForm.hide();
							functionsGridMovimentacao.carregaGrid();
							
						}else{
							Ext.ux.MessageBox.flash({
								msg: objRetorno.message,
								type: 'error'
							});
						}
		
					},
					
					params: this.params,
					scope: this			
				});
				
			//}
			
			
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Preencha todos os campos obrigatórios',
				type: 'warning',
				pause: 3
			});
		
		}
	}
	
	,alteraRegistro: function(button){
		
		var form = formSaida.getForm();
		
		
		if(form.isValid())
		{
			this.params = formSaida.form.getValues(true);
			this.params += "&tipo=D";
			
			this.loaderTarget = button;
			Ext.ux.Loader.start({sender: button, waitingText: 'Alterando...'});

			Ext.Ajax.request({
				url: baseURL + '/service/index.php?controller=MovimentoCaixaController&service=alterar',
				success:  function(result){
				
					var objRetorno = Ext.decode(result.responseText);
					
					if(objRetorno.success == true){
						Ext.ux.MessageBox.flash({
							msg: objRetorno.message,
							type: 'success'
						});
					   
						Ext.ux.Loader.stop(this.loaderTarget);
						windowSaidaForm.hide();
						functionsGridMovimentacao.carregaGrid();
						
					}else{
						Ext.ux.MessageBox.flash({
							msg: objRetorno.message,
							type: 'error'
						});
					}
	
				},
				
				params: this.params,
				scope: this			
			});                    
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Preencha todos os campos obrigatórios',
				type: 'warning',
				pause: 3
			});
		
		}
		
	}
	
	,confimaCancelamento: function(){
		Ext.MessageBox.confirm('Confirmação de cancelamento','Realmente deseja cancelar essa operação?', function(btn)
		{
			if(btn == 'yes')
			{
				windowSaidaForm.hide();
			}
		}, this);

	}
	
	,resetForm: function(){
		formSaida.form.reset();
	}
	
}

var functionsProjetoSaida = {
	
	carregaCombos: function(codProjeto, codDotacao){
		functionsProjetoSaida.listaDotacoesSaida(codProjeto, codDotacao);
	}
		
	,listaProjetosSaida: function (){
		var objparams = {
		
		}
		
		listaProjetosSaida.load({params : objparams, callback: functionsProjetoSaida.returnlistaProjetosSaida});
	}

	,returnlistaProjetosSaida: function(record, options, success){
		if(success){
			
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem dos projetos",
				type: 'error'
			});
		}
	}
	
	
	,listaAtividades: function(codProjeto){
		var objparams = {
			codigoProjeto: codProjeto
		}
		listaAtividades.load({params : objparams, callback: this.returnListaAtividades});
	}
	
	
	,returnListaAtividades: function(record, options, success){
		if(success){
			formSaida.getForm().findField("Atividade_codigo").clearValue();
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem das atividades",
				type: 'error'
			});
		}
	}
	
	
	,listaDotacoesSaida: function(codProjeto){
		var objparams = {
			Projeto_codigo: codProjeto
		}
		listaDotacoesSaida.load({params : objparams, callback: functionsProjetoSaida.returnlistaDotacoesSaida});
	}
	
	,returnlistaDotacoesSaida: function(record, options, success){
		if(success){
			formSaida.getForm().findField("Dotacao_codigo").setVisible(true);
			formSaida.getForm().findField("Dotacao_codigo").clearValue();
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem das dotações",
				type: 'error'
			});
		}
	}
	
}


var functionsPessoaSaida = {
	
	listaPessoasPorTipo: function(valorSelecionado){
		if(valorSelecionado.getValue() == "Funcionario"){
		
			formSaida.getForm().findField("Pessoa_codigo").clearValue();
			
			var objparams = {
				tipo: "Funcionario"
			}
			listaPessoasSaida.load({params : objparams, callback: this.returnListaFuncionarios});
		
		}else if(valorSelecionado.getValue() == "Fornecedor"){
			
			formSaida.getForm().findField("Pessoa_codigo").clearValue();
			
			var objparams = {
				tipo: "Fornecedor"
			}
			listaPessoasSaida.load({params : objparams, callback: this.returnListaFornecedores});
		}
	}
	
	,returnListaFuncionarios: function(record, options, success){
		if(success){
			
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem dos funcionários",
				type: 'error'
			});
		}
	}
	
	,returnListaFornecedores: function(record, options, success){
		if(success){
			
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem dos fornecedores",
				type: 'error'
			});
		}
	}
}


var saldoDotacao = new Ext.data.JsonStore({
    storeId: 'listaPessoasSaida',
    url: baseURL + '/service/index.php?controller=DotacaoController&service=calculaSaldoDotacao',
    root: 'elements',
    autoLoad: false,
	fields: [
		{
		    name: 'saldoCalculadoDotacao',
		    mapping: 'saldoCalculadoDotacao'
		}
    ]
});


var listaPessoasSaida = new Ext.data.JsonStore({
    storeId: 'listaPessoasSaida',
    url: baseURL + '/service/index.php?controller=PessoaController&service=listarPessoasPorTipo',
    root: 'elements',
    autoLoad: false,
	sortInfo: {field: 'Pessoa_nome', direction: 'ASC'},
    fields: [
		{
		    name: 'Pessoa_codigo',
		    mapping: 'codigo'
		}
		,{
		    name: 'Pessoa_nome',
		    mapping: 'nome'
		}  
    ]
});


var listaAtividades = new Ext.data.JsonStore({
    storeId: 'listaAtividades',
    url: baseURL + '/service/index.php?controller=ProjetoController&service=listarAtividadeComCusto',
    root: 'elements',
    autoLoad: false,
	sortInfo: {field: 'tituloAtividade', direction: 'ASC'},
    fields: [
		{
		    name: 'codigoAtividade',
		    mapping: 'codigo'
		}
		,{
            name: 'tituloAtividade',
            mapping: 'titulo'
        }
		,{
            name: 'valorEst',
            mapping: 'valorEst'
        }
    ],
    listeners: {
		"load": function(){
    		var defaultData = {
    			codigoAtividade: 'NULL',
    			tituloAtividade: '--'
    		};
    		var recId = 100; // provide unique id for the record
    		var r = new this.recordType(defaultData, ++recId); // create new record
    		this.insert(0, r); // insert a new record into the store (also see add)
		}
	
	}
});


var capturaSaida = new Ext.data.JsonStore({
    storeId: 'capturaSaida',
    url: baseURL + '/service/index.php?controller=MovimentoCaixaController&service=capturarMovimentoCaixa',
    root: 'elements',
    autoLoad: false,
	fields: [
		{
		    name: 'codigo',
		    mapping: 'codigo'
		}
		,{
		    name: 'Atividade_codigo',
		    mapping: 'Atividade_codigo'
		}
		,{
		    name: 'Pessoa_codigo',
		    mapping: 'Pessoa_codigo'
		}
		,{
		    name: 'tipoPessoa',
		    mapping: 'tipoPessoa'
		}
		,{
		    name: 'Dotacao_codigo',
		    mapping: 'Dotacao_codigo'
		}
		,{
		    name: 'Projeto_codigo',
		    mapping: 'Projeto_codigo'
		}
		,{
		    name: 'dataMovimentacao',
		    mapping: 'dataMovimentacao'
		}
		,{
		    name: 'tipo',
		    mapping: 'tipo'
		}
		,{
		    name: 'descricao',
		    mapping: 'descricao'
		}
		,{
		    name: 'valorOperacao',
		    mapping: 'valorOperacao'
		}
		,{
		    name: 'especie',
		    mapping: 'especie'
		}
		,{
		    name: 'numeroNota',
		    mapping: 'numeroNota'
		}
    ]
});


var listaProjetosSaida = new Ext.data.JsonStore({
    storeId: 'listaProjetosSaida',
    url: baseURL + '/service/index.php?controller=ProjetoController&service=listarProjetos',
    root: 'elements',
    autoLoad: false,
	sortInfo: {field: 'nomeProjeto', direction: 'ASC'},
    fields: [
		{
		    name: 'codigoProjeto',
		    mapping: 'codigo'
		}
		,{
            name: 'nomeProjeto',
            mapping: 'nome'
        }
    ]
});


var listaDotacoesSaida = new Ext.data.JsonStore({
    storeId: 'listaDotacoesSaida',
    url: baseURL + '/service/index.php?controller=DotacaoController&service=listarDotacoes',
    root: 'elements',
    autoLoad: false,
	sortInfo: {field: 'nomeDotacao', direction: 'ASC'},
    fields: [
		{
		    name: 'codigoDotacao',
		    mapping: 'codigo'
		}
		,{
            name: 'nomeDotacao',
            mapping: 'nome'
        }
    ]
});




var formSaida = new Ext.form.FormPanel({
	layout: 'form'
	, defaultType: 'textfield'
	, bodyStyle: 'padding:8px'
	, border: false
	, defaults:{
		anchor: '100%'
	}
	, items:[
 		{
 			xtype: 'fieldset'
 			, title: 'Dados Movimentação'
 			, collapsible: true
 			, labelWidth: 120
 			, defaults:{
 				anchor: '100%'
 			}
 			, items:[
				{
					xtype: 'hidden',
					name: 'codigo'
				}
				,{	
					xtype: 'combo'
					,fieldLabel: 'Tipo Pessoa'
					,name: 'tipoPessoa'
					,store: [["Funcionario", "Funcionário"],["Fornecedor","Fornecedor"]]
					,displayField: 'text'
					,valueField: 'id'
					,hiddenName: 'tipoPessoa'
					,mode: 'local'
					,typeAhead: true
					,editable: false
					,allowBlank: false
					,triggerAction: 'all'
					,listeners:{
			         	scope: this,
			         	'select': functionsPessoaSaida.listaPessoasPorTipo
			    	}
			    	
				}
				
				,{
					xtype: 'combo'
					,fieldLabel: 'Saída para'
					,name: 'Pessoa_codigo'
					,store: listaPessoasSaida
					,displayField: 'Pessoa_nome'
					,valueField: 'Pessoa_codigo'
					,hiddenName: 'Pessoa_codigo'
					,mode: 'local'
					,allowBlank: false
					,typeAhead: true
					,editable: false
					,triggerAction: 'all'
				}
				
				
				
				,{
					xtype: 'combo'
					,fieldLabel: 'Projeto'
					,name: 'Projeto_codigo'
					,store: listaProjetosSaida
					,displayField: 'nomeProjeto'
					,valueField: 'codigoProjeto'
					,hiddenName: 'Projeto_codigo'
					,mode: 'local'
					,typeAhead: true
					,allowBlank: false
					,triggerAction: 'all'
					,editable: false
					
					,listeners:{
			         	scope: this
			         	,'select': function(){
							functionsProjetoSaida.listaDotacoesSaida(formSaida.getForm().findField("Projeto_codigo").getValue())
							functionsProjetoSaida.listaAtividades(formSaida.getForm().findField("Projeto_codigo").getValue())
						}
			      	}
			    	

				}
				
				,{
					xtype: 'combo'
					,fieldLabel: 'Dotação'
					,name: 'Dotacao_codigo'
					,store: listaDotacoesSaida
					//,hidden: true
					,displayField: 'nomeDotacao'
					,valueField: 'codigoDotacao'
					,hiddenName: 'Dotacao_codigo'
					,mode: 'local'
					,typeAhead: true
					,allowBlank: false
					,triggerAction: 'all'
					,editable: false
					,listeners:{
			         	scope: this
			         	,'select': function(){
							functionsSaidaForm.calculaSaldoDotacao(formSaida.getForm().findField("Dotacao_codigo").getValue())
						}
			      	}
					
				}
				
				
				
				
				
				,{
					xtype: 'compositefield',
					fieldLabel: 'Atividades',
					msgTarget : 'side',
					anchor: '100%',
					defaults: {
						flex: 1
					},
					items: [
						{
							xtype: 'combo'
							,fieldLabel: 'Atividades'
							,name: 'Atividade_codigo'
							,store: listaAtividades
							,displayField: 'tituloAtividade'
							,valueField: 'codigoAtividade'
							,hiddenName: 'Atividade_codigo'
							,mode: 'local'
							,typeAhead: true
							,editable: false
							,triggerAction: 'all'
							,listeners:{
					         	scope: this
					         	,'select': function(){
									functionsSaidaForm.calculaValorEstimado(formSaida.getForm().findField("Atividade_codigo").getValue())
								}
					      	}
						}
						,{
							xtype: 'label'
							,text:'Valor Estimado Atividade:'
							,style: 'text-align:right; margin-right:5px; padding-left:5px; margin-top:4px'
							,width: 150
						}
						,{
							xtype: 'textfield'
							,name:'valorEstimadoAtividade'
							,toolTip: "Valor Estimado da atividade selecionada no combo ao lado"
							,disabled: true
							,listeners: {
				                render: function(c) {
				                    Ext.QuickTips.register({
				                        target: this,
				                        text: this.toolTip
				                    });
				                }
				            }
							,style: {
					            fontSize: '14px'
					       	}
						}
					]
				}

				
				,{
					xtype: 'datefield',
					fieldLabel: 'Data Movimentação',
					showToday: true,
					allowBlank: false,
					value: functionsSaidaForm.dt_atual,
					name: 'dataMovimentacao'
				}
				
				,{
					xtype: 'textarea',
					fieldLabel: 'Descrição',
					name: 'descricao',
					selectOnFocus: true

				}
				,{
					xtype: 'masktextfield',
					fieldLabel: 'Valor Operação',
					name: 'valorOperacao',
					mask: 'R$ #9.999.999.990,00',
					money: true,
					allowBlank: false
				}
				,{
					xtype: 'combo'
					,fieldLabel: 'Espécie'
					,name: 'especie'
					,store: [['ESP','Dinheiro'],['DOC','Doc'],['CHQ','Cheque'],['TED','Ted']]
					,displayField: 'especie'
					,valueField: 'codigo'
					,hiddenName: 'especie'
					,mode: 'local'
					,typeAhead: true
					,editable: false
					,allowBlank: false
					,triggerAction: 'all'
				}
				,{
					xtype: 'numberfield',
					fieldLabel: 'Número Nota',
					name: 'numeroNota'
				}
 			]
 		}
     ]
});

var windowSaidaForm = new Ext.Window({
	title: 'Registro de Saídas'
	, width: 800
	, height: 500
	, items: formSaida
	, layout: 'fit'
	, modal: true
	, closeAction:'hide'
	,listeners: {
		"show": function(){
			formSaida.getForm().findField("dataMovimentacao").setValue(functionsSaidaForm.dt_atual);
		}
	}
	, buttons: [
		{
			text: 'Salvar'
	   		, iconCls: 'bt_salvar'
	   		, scope	: this
	   		, handler: function(){
				if(formSaida.getForm().findField("codigo").getValue() !=  ""){
					functionsSaidaForm.alteraRegistro();
				}else{
					functionsSaidaForm.insereRegistro();
				}
			
			}
	   	}
		,{
			text: 'Cancelar'
			, iconCls: 'bt_cancelar'
			, scope	: this
			, handler: functionsSaidaForm.confimaCancelamento
		}
	]
	
});

